package Persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import Clases.Producto;
import Clases.ProductoSeccion;
import Controlador.controlador;

public class DAOProductoSeccion{
       
        private static DAOProductoSeccion pool;
       
        private DAOProductoSeccion(){
        }      
       
        public static DAOProductoSeccion getInstancia()
        {
                if (pool == null)
                        pool = new DAOProductoSeccion();
                return pool;
        }
       
        public void insert(ProductoSeccion prodSec)
        {
                Connection con = PoolConnection.getPoolConnection().getConnection();
                try
                {
                        //CAMBIAR NOMBRE DE LA TABLA
                        String senten = "INSERT INTO [TPOAPI].[dbo].[ProductoSeccion] (nomSeccion, codBarra, stock) VALUES (?,?,?)" ;
                        PreparedStatement ps = null;
                        ps = con.prepareStatement(senten);
                        ps.setString(1, prodSec.getNombreSeccionCocina());
                        ps.setInt(2,prodSec.getProducto().getCodBarra());
                        ps.setFloat(3, prodSec.getStock());
                        ps.execute();
                        PoolConnection.getPoolConnection().realeaseConnection(con);
                }
              catch( SQLException e )
              {
                                System.out.println("Mensaje Error al Insertar Producto en Seccion: " + e.getMessage());
                                System.out.println("Stack Trace al Insertar Producto en Seccion: " + e.getStackTrace());
                               
              }
             
        }
        public void update(ProductoSeccion prodSec)
        {
                Connection con = PoolConnection.getPoolConnection().getConnection();
                try {
                        //Preparar sentencia UPDATE en tabla destino
                        String senten = "[TPOAPI].[dbo].[ProductoSeccion] (NomSeccion, codBarra, Stock) VALUES (?,?,?)" ;
                        PreparedStatement ps = null;
                        ps = con.prepareStatement(senten);
                        ps.setString(1, prodSec.getNombreSeccionCocina());
                        ps.setInt(2,prodSec.getProducto().getCodBarra());
                        ps.setFloat(3, prodSec.getStock());
                        ps.execute();
                        PoolConnection.getPoolConnection().realeaseConnection(con);
                }
           catch( SQLException e )
              {
                                System.out.println("Mensaje Error al Modificar Producto en Seccion: " + e.getMessage());
                                System.out.println("Stack Trace al Modificar Producto en Seccion: " + e.getStackTrace());
                                PoolConnection.getPoolConnection().realeaseConnection(con);
              }
                     
        }
        //sacamos el delete, la baja la tomamos como stock == 0.
       
        public ProductoSeccion buscarSeccionProducto(int idProd, String nomSec)
        {
                Connection con = PoolConnection.getPoolConnection().getConnection();
                ProductoSeccion prodSec = null;
               
                //Generar sentencia SQL
                try
                {
                        //revisar la sentencia en sql !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        String senten = "SELECT * from [TPOAPI].[dbo].[ProductoSeccion] where (NomSeccion = ? AND codBarra = ?)" ;
                        PreparedStatement ps = null;
                        ps = con.prepareStatement(senten);
                        ps.setString(1,nomSec);
                        ps.setInt(2, idProd);
                        ResultSet result = ps.executeQuery();
                        while (result.next())
                        {
                                prodSec = new ProductoSeccion();
                                prodSec.setNombreSeccionCocina(result.getString("NomSeccion"));
                                Producto producto = new Producto();
                                producto = controlador.getInstancia().buscarProducto(result.getInt("codBarra"));
                                prodSec.setProducto(producto);
                                prodSec.setStock(result.getInt("Stock"));

                        }
                        PoolConnection.getPoolConnection().realeaseConnection(con);
                        return prodSec;
                }
              catch( SQLException e )
              {
                                System.out.println("Mensaje Error al Buscar Producto en Seccion: " + e.getMessage());
                                System.out.println("Stack Trace al Buscar Prducto en Seccion: " + e.getStackTrace());
                                PoolConnection.getPoolConnection().realeaseConnection(con);
              }
              return prodSec;
        }
       
        public Vector<ProductoSeccion> buscarProductosXSeccion(String nomSec)
        {
                Connection con = PoolConnection.getPoolConnection().getConnection();
                Vector<ProductoSeccion> vProdSec = null;
                ProductoSeccion prodSec = null;
               
                //Generar sentencia SQL
                try
                {
                        //revisar la sentencia en sql !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        String senten = "SELECT * from [TPOAPI].[dbo].[ProductoSeccion] where (NomSeccion = ?)";
                        PreparedStatement ps = null;
                        ps = con.prepareStatement(senten);
                        ps.setString(1,nomSec);
                        ResultSet result = ps.executeQuery();
                        vProdSec = new Vector<ProductoSeccion>();
                        while (result.next())
                        {
                                prodSec = new ProductoSeccion();
                                prodSec.setNombreSeccionCocina(result.getString("nomSeccion"));
                                prodSec.setProducto(DAOProducto.getInstancia().buscarProducto(result.getInt("codBarra")));
                                prodSec.setStock(result.getFloat("stock"));
                                vProdSec.add(prodSec);
                        }
                        PoolConnection.getPoolConnection().realeaseConnection(con);
                        return vProdSec;
                }
              catch( SQLException e )
              {
                                System.out.println("Mensaje Error al Buscar Producto en Seccion: " + e.getMessage());
                                System.out.println("Stack Trace al Buscar Prducto en Seccion: " + e.getStackTrace());
                                PoolConnection.getPoolConnection().realeaseConnection(con);
              }
              return vProdSec;
        }
       
}
